home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / nethack.lha / nethack-3.1 / include / dungeon.h < prev    next >
C/C++ Source or Header  |  1993-01-18  |  5KB  |  132 lines

  1. /*    SCCS Id: @(#)dungeon.h    3.1    93/01/17    */
  2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  3. /* NetHack may be freely redistributed.  See license for details. */
  4.  
  5. #ifndef DUNGEON_H
  6. #define DUNGEON_H
  7.  
  8. typedef struct d_flags {    /* dungeon/level type flags */
  9.     Bitfield(town, 1);    /* is this a town? (levels only) */
  10.     Bitfield(hellish, 1);    /* is this part of hell? */
  11.     Bitfield(maze_like, 1);    /* is this a maze? */
  12.     Bitfield(rogue_like, 1); /* is this an old-fashioned presentation? */
  13.     Bitfield(align, 3);    /* dungeon alignment. */
  14.     Bitfield(unused, 1);    /* etc... */
  15. } d_flags;
  16.  
  17. #include "align.h"
  18.  
  19. typedef struct d_level {    /* basic dungeon level element */
  20.     xchar    dnum;        /* dungeon number */
  21.     xchar    dlevel;        /* level number */
  22. } d_level;
  23.  
  24. typedef struct s_level {    /* special dungeon level element */
  25.     struct    s_level    *next;
  26.     d_level    dlevel;        /* dungeon & level numbers */
  27.     char    proto[15];    /* name of prototype file (eg. "tower") */
  28.     char    boneid;        /* character to id level in bones files */
  29.     uchar    rndlevs;    /* no. of randomly available similar levels */
  30.     d_flags    flags;        /* type flags */
  31. } s_level;
  32.  
  33. typedef struct stairway {    /* basic stairway identifier */
  34.     xchar    sx, sy;        /* x / y location of the stair */
  35.     d_level    tolev;        /* where does it go */
  36.     char    up;        /* what type of stairway (up/down) */
  37. } stairway;
  38.  
  39. /* level region types */
  40. #define LR_DOWNSTAIR 0
  41. #define LR_UPSTAIR 1
  42. #define LR_PORTAL 2
  43. #define LR_BRANCH 3
  44. #define LR_TELE 4
  45. #define LR_UPTELE 5
  46. #define LR_DOWNTELE 6
  47.  
  48. typedef struct dest_area {    /* non-stairway level change indentifier */
  49.     xchar    lx, ly;        /* "lower" left corner (near [0,0]) */
  50.     xchar    hx, hy;        /* "upper" right corner (near [COLNO,ROWNO]) */
  51.     xchar    nlx, nly;    /* outline of invalid area */
  52.     xchar    nhx, nhy;    /* opposite corner of invalid area */
  53. } dest_area;
  54.  
  55. typedef struct dungeon {    /* basic dungeon identifier */
  56.     char    dname[24];    /* name of the dungeon (eg. "Hell") */
  57.     char    proto[15];    /* name of prototype file (eg. "tower") */
  58.     char    boneid;        /* character to id dungeon in bones files */
  59.     d_flags    flags;        /* dungeon flags */
  60.     xchar    entry_lev;    /* entry level */
  61.     xchar    num_dunlevs;    /* number of levels in this dungeon */
  62.     xchar    dunlev_ureached; /* how deep you have been in this dungeon */
  63.     int    ledger_start,    /* the starting depth in "real" terms */
  64.         depth_start;    /* the starting depth in "logical" terms */
  65. } dungeon;
  66.  
  67. /*
  68.  * A branch structure defines the connection between two dungeons.  They
  69.  * will be ordered by the dungeon number/level number of 'end1'.  Ties
  70.  * are resolved by 'end2'.  'Type' uses 'end1' arbitrarily as the primary
  71.  * point.
  72.  */
  73. typedef struct branch {
  74.     struct branch *next;    /* next in the branch chain */
  75.     int          id;        /* branch identifier */
  76.     int          type;        /* type of branch */
  77.     d_level      end1;        /* "primary" end point */
  78.     d_level      end2;        /* other end point */
  79.     boolean      end1_up;    /* does end1 go up? */
  80. } branch;
  81.  
  82. /* branch types */
  83. #define BR_STAIR   0    /* "Regular" connection, 2 staircases. */
  84. #define BR_NO_END1 1    /* "Regular" connection.  However, no stair from  */
  85.             /*    end1 to end2.  There is a stair from end2 */
  86.             /*    to end1.                  */
  87. #define BR_NO_END2 2    /* "Regular" connection.  However, no stair from  */
  88.             /*    end2 to end1.  There is a stair from end1 */
  89.             /*    to end2.                  */
  90. #define BR_PORTAL  3    /* Connection by magic portals (traps) */
  91.  
  92.  
  93. /* A particular dungeon contains num_dunlevs d_levels with dlevel 1..
  94.  * num_dunlevs.  Ledger_start and depth_start are bases that are added
  95.  * to the dlevel of a particular d_level to get the effective ledger_no
  96.  * and depth for that d_level.
  97.  *
  98.  * Ledger_no is a bookkeeping number that gives a unique identifier for a
  99.  * particular d_level (for level.?? files, e.g.).
  100.  *
  101.  * Depth corresponds to the number of floors below the surface.
  102.  */
  103. #define Is_astralevel(x)    (on_level(x, &astral_level))
  104. #define Is_earthlevel(x)    (on_level(x, &earth_level))
  105. #define Is_waterlevel(x)    (on_level(x, &water_level))
  106. #define Is_firelevel(x)        (on_level(x, &fire_level))
  107. #define Is_airlevel(x)        (on_level(x, &air_level))
  108. #define Is_medusa_level(x)    (on_level(x, &medusa_level))
  109. #define Is_oracle_level(x)    (on_level(x, &oracle_level))
  110. #define Is_valley(x)        (on_level(x, &valley_level))
  111. #define Is_asmo_level(x)    (on_level(x, &asmodeus_level))
  112. #define Is_baal_level(x)    (on_level(x, &baalzebub_level))
  113. #define Is_wiz1_level(x)    (on_level(x, &wiz1_level))
  114. #define Is_wiz2_level(x)    (on_level(x, &wiz2_level))
  115. #define Is_wiz3_level(x)    (on_level(x, &wiz3_level))
  116. #define Is_sanctum(x)        (on_level(x, &sanctum_level))
  117. #define Is_portal_level(x)    (on_level(x, &portal_level))
  118. #define Is_rogue_level(x)    (on_level(x, &rogue_level))
  119. #define Is_stronghold(x)    (on_level(x, &stronghold_level))
  120. #define Is_bigroom(x)        (on_level(x, &bigroom_level))
  121. #ifdef MULDGN
  122. #define Is_qstart(x)        (on_level(x, &qstart_level))
  123. #define Is_qlocate(x)        (on_level(x, &qlocate_level))
  124. #define Is_nemesis(x)        (on_level(x, &nemesis_level))
  125. #define Is_knox(x)        (on_level(x, &knox_level))
  126. #endif
  127.  
  128. #define Inhell            In_hell(&u.uz)    /* now gehennom */
  129. #define In_endgame(x)        ((x)->dnum == astral_level.dnum)
  130.  
  131. #endif /* DUNGEON_H */
  132.